package com.cn.wanxi.service.impl;


import com.cn.wanxi.dao.NavDao;
import com.cn.wanxi.model.NavModel;
import com.cn.wanxi.service.NavService;
import com.cn.wanxi.util.IOTool;
import com.cn.wanxi.util.PathTool;
import com.cn.wanxi.util.Tool;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Arrays;

/**
 * 五件事情
 * ------------------------------
 * 第二阶段：将数据保存到后台，然后渲染到页面上
 * 1.必须由数据    按照面向对象的方式（model层），将数据保存到dao层（数据实现层）
 * 2.将html修改为jsp   页面引入  <c:forEach items="${newsModels}" var="model">
 * 3.创建servlet 页面访问地址  注解里面的值 @WebServlet("/home")
 * 4.创建service  服务逻辑层  去封装页面需要的model
 * 第三阶段：将数据保存到文件，然后读取出来放到jsp进行渲染
 * 1.必须要由文件       创建文件  file
 * 2.数据写入之前需要 数据，所以，将dao的数据封装成字符串数组String[] data
 * 3.将数据写入文件  需要文件和数据   file 和data
 * 4.读取数据    file    返回读取的数据 String
 * 5.拿到读取的数据，将数据转换为需要的对象数据
 */
public class NavServiceImpl implements NavService {
    @Override
    public NavModel[] getNavModels() {
//        1.创建文件
        String path = "E:\\wanxi\\step-3\\canyin03-1101\\web";
        String note = "note";
        String fileName = "nav.txt";
        File file = IOTool.createFile(path, note, fileName);
//        2.封装数据到数组
        String[] data = getData();
//        3.保存数据
        IOTool.saveFile(file, data);
//        4.读取数据
        String s = IOTool.readFile(file);
//        5.封装数据返回给servlet
        return setData(s);
    }

    private NavModel[] setData(String s) {
        System.out.println(s);
//        通过换行符，分割成两段字符串，分为 href和title
        String[] results = s.split(PathTool.ENTER);
        String href = results[0];
        String title = results[1];

        String[] hrefs = href.split(",");
        String[] titles = title.split(",");
        int length = hrefs.length;//得到数组的长度
//        NavModel数组的长度，应该和hrefs的长度一致
        NavModel[] navModels = new NavModel[length];
        for (int i = 0; i < length; i++) {
            NavModel model = new NavModel();
            model.setHref(hrefs[i]);//这里面的数据应该为数组
            model.setTitle(titles[i]);
            navModels[i] = model;
        }
        return navModels;
    }




    /**
     * 需要将dao层的数组转换为字符串
     *
     * @return
     */
    private String[] getData() {
        NavDao navDao = new NavDao();
//        将dao层的数组转换为字符串
        String href = Tool.arrayToString(navDao.hrefs);
//        String title = Arrays.toString(navDao.titles);
        String[] data = {href, Tool.arrayToString(navDao.titles)};
        return data;
    }


}
